/*
 *    Copyright (c) 2018-2025, lengleng All rights reserved.
 *
 * Redistribution and use in source and binary forms, with or without
 * modification, are permitted provided that the following conditions are met:
 *
 * Redistributions of source code must retain the above copyright notice,
 * this list of conditions and the following disclaimer.
 * Redistributions in binary form must reproduce the above copyright
 * notice, this list of conditions and the following disclaimer in the
 * documentation and/or other materials provided with the distribution.
 * Neither the name of the pig4cloud.com developer nor the names of its
 * contributors may be used to endorse or promote products derived from
 * this software without specific prior written permission.
 * Author: lengleng (wangiegie@gmail.com)
 */

package com.pig4cloud.pigx.contract.mongo.entity;


import lombok.Data;
import org.springframework.data.annotation.Id;
import org.springframework.data.mongodb.core.index.Indexed;

import java.io.Serializable;
import java.math.BigDecimal;
import java.time.LocalDateTime;

/**
 * 新增订单mongodb实体类
 *
 * @since 2022-08-11 10:08:11
 */
@Data
public class ContractOrderMongo implements Serializable {

	private static final long serialVersionUID = 1L;

	/**
	 * 主键
	 */
	@Id
	private Long id;

	/**
	 * 用户id
	 */
	@Indexed(useGeneratedName = true)
	private Long userId;

	/**
	 * 币对id
	 */
	@Indexed(useGeneratedName = true)
	private Long symbolId;

	/**
	 * 币对名称
	 */
	private String symbolName;

	/**
	 * 类型（0市价单、1限价单、2强平单）
	 */
	private String type;

	/**
	 * 仓位id，平仓时不为空
	 */
	private Long positionId;

	/**
	 * 仓位模式（0逐仓、1全仓）
	 */
	private String positionMode;

	/**
	 * 方向（0做多、1做空）
	 */
	private String side;

	/**
	 * 操作类型（0开仓、1平仓）
	 */
	private String operationType;

	/**
	 * 是否是买单（0否，是卖单、1是买单）
	 */
	private String isBuy;

	/**
	 * 是否机器人（0否、1是）
	 */
	@Indexed(useGeneratedName = true)
	private String isRobot;

	/**
	 * 价格，市价单时为空
	 */
	@Indexed(useGeneratedName = true)
	private BigDecimal price;

	/**
	 * 数量
	 */
	@Indexed(useGeneratedName = true)
	private BigDecimal num;

	/**
	 * 倍数
	 */
	private Integer multiple;

	/**
	 * 成交金额
	 */
	private BigDecimal dealAmount;

	/**
	 * 已成交数量
	 */
	private BigDecimal dealNum;

	/**
	 * 未成交金额
	 */
	private BigDecimal noDealAmount;

	/**
	 * 未成交数量
	 */
	@Indexed(useGeneratedName = true)
	private BigDecimal noDealNum;

	/**
	 * 订单面值
	 */
	private BigDecimal orderValue;

	/**
	 * 成交均价
	 */
	private BigDecimal dealAvg;

	/**
	 * 手续费
	 */
	private BigDecimal handlingFee;

	/**
	 * 保证金
	 */
	private BigDecimal margin;

	/**
	 * 冻结合约账户保证金，开仓时冻结
	 */
	private BigDecimal frozenAmount;

	/**
	 * 收益，平仓时有值
	 */
	private BigDecimal profit;

	/**
	 * 收益率，平仓时有值
	 */
	private BigDecimal profitRate;

	/**
	 * 强平清算费
	 */
	private BigDecimal liquidateFee;

	/**
	 * 是否止盈（0否、1是）
	 */
	private String hasStopProfit;

	/**
	 * 止盈触发价格，是否止盈为是时不能为空
	 */
	private BigDecimal stopProfitTrigger;

	/**
	 * 止盈价格类型（0市价、1限价），是否止盈为是时不能为空
	 */
	private String stopProfitType;

	/**
	 * 止盈价格，止盈价格类型为限价时不能为空
	 */
	private BigDecimal stopProfitPrice;

	/**
	 * 是否止损（0否、1是）
	 */
	private String hasStopLost;

	/**
	 * 止损触发价格，是否止损为是时不能为空
	 */
	private BigDecimal stopLostTrigger;

	/**
	 * 止损价格类型（0市价、1限价），是否止损为是时不能为空
	 */
	private String stopLostType;

	/**
	 * 止损价格，止损价格类型为限价时不能为空
	 */
	private BigDecimal stopLostPrice;

	/**
	 * 创建时间
	 */
	private LocalDateTime createTime;

	/**
	 * 创建人
	 */
	private Long createBy;

	/**
	 * 修改时间
	 */
	private LocalDateTime updateTime;

	/**
	 * 修改人
	 */
	private Long updateBy;

	/**
	 * 委托状态（0委托中、1部分成交、2部分已撤销、3完全成交、4已撤销、5已过期）
	 */
	private String status;

	/**
	 * 是否删除（null是、0否）
	 */
	private String isDeleted;

	/**
	 * 是否是新订单
	 */
	@Indexed(useGeneratedName = true)
	private Boolean isNew;
	/**
	 * 是否是条件挂单
	 */
	private Boolean isConditionPending;
	/**
	 * 增加过挂单数量
	 */
	private Boolean hasAddPendingNum;
	/**
	 * 增加过条件挂单数量
	 */
	private Boolean hasAddConditionPendingNum;
}
